package org.example.study2;

import java.io.File;
import java.io.IOException;
import java.util.Scanner;

public class FileSearchAndDeletionTool2 {
    public static void main(String[] args) throws IOException {
        // 1. 让用户输入一个有效路径
        System.out.println("请输入要扫描的路径:");
        Scanner scanner = new Scanner(System.in);
        // 使用 nextLine() 来读取可能包含空格的路径
        String rootPath = scanner.nextLine();
        File rootFile = new File(rootPath);

        // 2. 校验路径是否有效
        if (!rootFile.exists()) {
            System.out.println("您输入的路径不存在.");
            return;
        }
        if (!rootFile.isDirectory()) {
            System.out.println("您输入的路径不是一个目录.");
            return;
        }

        // 3. 让用户输入指定的字符串
        System.out.println("请输入查询的字符串:");
        String keyword = scanner.nextLine(); // 使用 nextLine() 保持一致

        // 4. 校验字符串是否有效
        if (keyword.isEmpty()) {
            System.out.println("关键字不能为空.");
            return;
        }

        // 5. 扫描目录，传递 scanner 对象以避免输入流混乱
        scan(rootFile, keyword, scanner);
    }

    private static void scan(File rootPath, String keyword, Scanner scanner) throws IOException {
        // 获取目录下的文件和子目录
        File[] files = rootPath.listFiles();
        if (files == null) {
            System.out.println("无法访问路径: " + rootPath.getCanonicalPath());
            return;
        }
        if (files.length == 0) {
            return;
        }

        for (File file : files) {
            if (file.isFile()) {
                String fileName = file.getName();
                if (fileName.contains(keyword)) {
                    System.out.println("找到文件：" + file.getCanonicalPath() +
                            "，包含关键字 " + keyword + ", 是否删除？(Y/N)");
                    String next = scanner.next();
                    // 清除输入缓冲区中的剩余字符（包括换行符）
                    scanner.nextLine();

                    if (next.equalsIgnoreCase("Y")) {
                        if (file.delete()) {
                            System.out.println("删除文件：" + file.getCanonicalPath() + "成功");
                        } else {
                            System.out.println("删除文件失败：" + file.getCanonicalPath());
                        }
                    }
                }
            } else {
                // 递归扫描子目录
                scan(file, keyword, scanner);
            }
        }
    }
}